﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AdministracionAreasComunesWeb.Models.Propietarios;

namespace AdministracionAreasComunesWeb.Controllers
{
    public class PropietariosController : Controller
    {
       
        //
        // GET: /Propietarios/

        public ActionResult Registro()
        {
            return View();
        }

        //
        // POST: /Propietarios/Create

        [HttpPost]
        public ActionResult Registro(Propietario propietario)
        {
            try
            {
                //Metodo de validacion
                String mensaje = ValidarNuevoPropietario(propietario);
                if (mensaje.Equals(""))
                {
                    //Instancia del servicio
                    PropietarioServiceReference.PropietarioServiceClient propietarioService = new PropietarioServiceReference.PropietarioServiceClient();

                    //Llamada al servicio para guardar
                    propietarioService.RegistrarPropietario(propietario.Nombre, propietario.Apellido, propietario.NumeroTorre, propietario.NumeroDpto, propietario.Piso);

                    return RedirectToAction("Listado");
                }
                else
                {
                    ViewData["MsjError"] = mensaje;

                    return View();
                }

            }
            catch
            {
                return View();
            }
        }

        private String ValidarNuevoPropietario(Propietario propietario) 
        {
            //Instancia el servicio
            PropietarioServiceReference.PropietarioServiceClient propietarioService = new PropietarioServiceReference.PropietarioServiceClient();
            List<Propietario> list = new List<Propietario>();

            //Se recupera lista d epropietarios
            var lstProps = propietarioService.ListarPropietarios();

            //Se transforma lista de propietarios para trabajar con ella
            foreach(PropietarioServiceReference.Propietario prop in lstProps)
            {
                list.Add(new Propietario() 
                { 
                  Apellido = prop.Apellido, 
                  Nombre = prop.Nombre, 
                  NumeroDpto = Convert.ToInt32(prop.Dpto), 
                  NumeroTorre = Convert.ToInt32(prop.Torre), 
                  Piso = Convert.ToInt32(prop.Piso) 
                });
            }

            String mensj = "";

            if (propietario.NumeroTorre > 5)
            {
                mensj = "Solo existen 5 torres.";
            }

            if (propietario.NumeroDpto > 999)
            {
                mensj = "Solo existen departamentos con 3 dígitos";
            }

            foreach (Propietario pro in list) 
            {
                if (pro.NumeroTorre == propietario.NumeroTorre && pro.NumeroDpto == propietario.NumeroDpto)
                {
                    mensj = "No se puede registrar 2 propeitarios al mismo pto.";
                }
                
            }

            return mensj;
        }


        //
        // GET: /Propietarios/

        public ActionResult Listado()
        {
            //Instancia el servicio
            PropietarioServiceReference.PropietarioServiceClient propietarioService = new PropietarioServiceReference.PropietarioServiceClient();
            List<Propietario> list = new List<Propietario>();

            //Se recupera listra de Propietarios de BD
            var lstProps = propietarioService.ListarPropietarios();

            //Se tranforma lista de propietarios para trabajarla
            foreach (PropietarioServiceReference.Propietario prop in lstProps)
            {
                list.Add(new Propietario()
                {
                    Apellido = prop.Apellido,
                    Nombre = prop.Nombre,
                    NumeroDpto = Convert.ToInt32(prop.Dpto),
                    NumeroTorre = Convert.ToInt32(prop.Torre),
                    Piso = Convert.ToInt32(prop.Piso)
                });
            }

            //Retormna loista a la vista
            return View("Listado", list);
        }
    }
}
